package com.ww.java.generic.wildcard;

/**
 * 对数组的这种赋值并不可怕，因为在运行时可以发现你已经插入了不正确的类型。但是泛型的主要目标之一是将这种错误检查引入到编译期。
 */
public class NonCovariantGenerics {
    // 编译报错，类型不兼容
//    List<Fruit> flist = new ArrayList<Apple>();
    /**
     * 不能把一个涉及Apple的泛型赋给一个涉及Fruit的泛型
     * 如果就像在数组的情况中一样，编译器对代码的了解足够多，可以确定所涉及到的容器，那么它可能会留下一些余地。但是它不知道任何有关这方面的信息，
     * 因此它拒绝向上转型。然而实际上这根本不是向上转型——Apple的List不是Fruit的List。Apple的List在类型上不等价Fruit的List，即使Apple是一种
     * Fruit类型。
     */
}
